Zanim przejdziesz przez ból debugowania użyj środowiska pracy Test aby sprawdzić czy standardowe testy działają poprawnie. Jeśli testy nie są kompletne, prawdopodobnie instalacja jest uszkodzona.
Debugowanie w programie FreeCAD jest wspierane przez kilka wewnętrznych mechanizmów. Wersja programu FreeCAD z wierszem poleceń dostarcza kilka opcji do obsługi debugowania.
Są to obecnie rozpoznawane opcje w programie FreeCAD w wersji 0.19:
Opcje ogólne:
-v [ --version ] Drukuje ciąg znaków wersji. -h [ --help ] Drukuje komunikat pomocy -c [ --console ] Uruchamia się w trybie konsolowym --response-file arg Można też podać z '@name' --dump-config Zrzuca konfigurację --get-config arg Wypisuje wartość żądanego klucza konfiguracyjnego
Konfiguracja:
-l [ --write-log ] Zapisuje plik dziennika do: $HOME/.local/share/FreeCAD.log (Linux) $HOME/Library/Application\ Support/FreeCAD/FreeCAD.log (macOS) %APPDATA%FreeCAD/FreeCAD.log (Windows) --log-file arg W przeciwieństwie do --write-log pozwala na logowanie do dowolnego pliku. -u [ --user-cfg ] arg Plik konfiguracyjny użytkownika do ładowania / zapisywania ustawień użytkownika -s [ --system-cfg ] arg Plik konfiguracyjny systemu do załadowania / zapisu ustawień systemowych -t [ --run-test ] arg Przypadek testowy - lub 0 dla wszystkich -M [ --module-path ] arg Ścieżki do dodatkowych modułów -P [ --python-path ] arg Dodatkowe ścieżki dostępu do Pythona --single-instance Pozwala na uruchomienie pojedynczej instancji aplikacji
Jeżeli używasz wersji FreeCAD z ostatniej fazy rozwoju, może ona ulec awarii. Możesz pomóc w rozwiązaniu takich problemów poprzez dostarczenie deweloperom śladów wstecz. Aby to zrobić, musisz mieć uruchomiony debug build oprogramowania. Debug build jest parametrem, który jest ustawiany w czasie kompilacji, więc albo będziesz musiał skompilować FreeCAD samodzielnie, albo zdobyć prekompilowaną wersję debug.
Debugowanie w systemie Linux →
Wymagania wstępne:
Postępowanie: W oknie terminala wprowadź następujące dane:
Znajdź binaria FreeCAD w swoim systemie:
$ whereis freecad
freecad: /usr/local/freecad <--- for example
$ cd /usr/local/freecad/bin
$ gdb FreeCAD
GNUdebugger wyśle kilka informacji inicjalizujących. Polecenie (gdb) pokazuje, że GNUDebugger jest uruchomiony w terminalu, teraz wprowadź dane:
(gdb) handle SIG33 noprint nostop
(gdb) run
FreeCAD zostanie teraz uruchomiony. Wykonaj czynności, które powodują awarię lub zawieszenie programu FreeCAD, a następnie wpisz w oknie terminala:
(gdb) bt
Spowoduje to wygenerowanie długiej listy tego, co dokładnie robił program, kiedy się zawiesił lub przestał działać. Dołącz to do swojego raportu o problemie.
(gdb) bt full
Wypisuje również wartości zmiennych lokalnych. Może to być połączone z liczbą, aby ograniczyć ilość wyświetlanych klatek.
Debugowanie w systemie macOS →
Wymagania wstępne:
Postępowanie: W oknie terminala wprowadź następujące dane:
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB wyśle kilka informacji inicjalizujących. Polecenie (lldb) pokazuje, że GNUDebugger jest uruchomiony w terminalu, teraz wprowadź dane:
(lldb) run
FreeCAD zostanie teraz uruchomiony. Wykonaj czynności, które powodują awarię lub zawieszenie programu FreeCAD, a następnie wpisz w oknie terminala:
(lldb) bt
Spowoduje to wygenerowanie długiej listy tego, co dokładnie robił program, kiedy się zawiesił lub przestał działać. Dołącz to do swojego raportu o problemie.
(Dotyczy systemów Linux i macOS)
Czasami pomocne staje się określenie, jakie biblioteki ładuje FreeCAD, szczególnie jeśli ładowane są biblioteki o tej samej nazwie, ale w różnych wersjach (kolizja wersji). Aby zobaczyć, które biblioteki są ładowane przez FreeCAD podczas awarii, powinieneś otworzyć terminal i uruchomić go w debugerze. W drugim oknie terminala znajdź id procesu dla FreeCAD:
ps -A | grep FreeCAD
Użyj uzyskanego identyfikatora i podaj go do lsof
:
lsof -p process_id
Wyświetli to długą listę załadowanych zasobów. Tak więc, na przykład, jeśli próbujesz się upewnić, że więcej niż jedna wersja biblioteki Coin3d jest załadowana, przewiń listę lub poszukaj bezpośrednio Coin na liście:
lsof -p process_id | grep Coin
Aby uzyskać bardziej nowoczesne podejście do debugowania w środowisku Python, zobacz te posty:
Debugowanie w winpdb →
Oto przykład użycia Winpdb wewnątrz FreeCAD:
Potrzebujemy debuggera Python Winpdb. Jeśli nie masz go zainstalowanego, na Ubuntu/Debianie zainstaluj go za pomocą:
sudo apt-get install winpdb
Teraz skonfigurujmy debugger.
Teraz krok po kroku uruchomimy testowy skrypt Python w programie FreeCAD.
import rpdb2
rpdb2.start_embedded_debugger("test")
import FreeCAD
import Part
import Draft
print "hello"
print "hello"
import Draft
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
Draft.makeWire(points,closed=False,face=False,support=None)
Debugowanie kodu VS →
Wymagania wstępne:
# In a cmd window that has a path to you local Python 3:
pip install ptvsd
# Then if your Python is installed in C:\Users\<userid>\AppData\Local\Programs\Python\Python37
# and your FreeCAD is installed in C:\freecad\bin
xcopy "C:\Users\<userid>\AppData\Local\Programs\Python\Python37\Lib\site-packages\ptvsd" "C:\freecad\bin\Lib\site-packages\ptvsd"
Dokumentacja Visual Studio Code do zdalnego debugowania
Postępowanie:
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
ptvsd.wait_for_attach()
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
from sys import path
sys.path.append('/path/to/site-packages')
Gdzie ścieżka wskazuje katalog, w którym ptvsd został zainstalowany.
W pakiecie dla Maca jest to /Applications/FreeCAD.App/Contents/Resources/bin/python.
Można go zlokalizować w systemie wpisując:
import sys
print(sys.executable)
w konsoli Python programu FreeCAD.
Debugowanie LiClipse →
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
squashfs-root> ./usr/bin/freecadcmd
Twoja lokalizacja/squashfs-root/usr/bin/python
.pydevd.py
w swojej instalacji w liclipse.
Twoja lokalizacja/liclipse/plugins/org.python.pydev.xx/pysrc
.import sys; sys.path.append("path ending with /pysrc")
import pydevd; pydevd.settrace()
squashfs-root> ./usr/bin/freecad
pydevd.settrace()
) w programie FreeCAD, tak jak robisz to normalnie.
Zapoznaj się z treścią strony artykuł o Pyzo.
Dla programistów chcących zagłębić się w kernel OpenCasCade, użytkownik @abdullah stworzył wątek orientacyjny omawiający jak tego dokonać.